package com.xbongbong.saas.model;

import com.xbongbong.paas.toolbox.exception.XbbException;
import com.xbongbong.paas.toolbox.wrap.IModel;
import com.xbongbong.saas.domain.entity.FundAccountFlowEntity;

import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * 资金账户流水Model
 *
 * @author 徐俊杰
 * @date 2020/3/17 11:26
 * @since v1.0
 */

public interface FundAccountFlowModel extends IModel<FundAccountFlowEntity> {

    /**
     * 新增资金账户流水
     * @param entity 新增参数
     * @return 是否成功
     */
    @Override
    Integer insert(FundAccountFlowEntity entity) throws XbbException;

    /**
     * 更新资金账户流水
     * @param entity 新增参数
     * @return 是否成功
     */
    @Override
    Integer update(FundAccountFlowEntity entity) throws XbbException;

    /**
     * 根据参数查询
     * @param param 查询条件
     * @return 结果集
     */
    @Override
    List<FundAccountFlowEntity> findEntitys(Map<String, Object> param);

    /**
     * 批量更新
     * @param list 更新对象集合
     * @param corpid 公司ID
     * @throws XbbException error
     * @author zhouwq
     * @return 成功标识
     * @date 2020/3/20 9:46
     */
    Integer updateBatch(List<FundAccountFlowEntity> list, String corpid) throws XbbException;

    /**
     * 批量更新es（把库里数据同步到es）
     * @param list 数据库实体list
     * @throws XbbException
     * @author zcp
     * @since v1.0
     * @version v1.0
     */
    void updateBatchEs(List<FundAccountFlowEntity> list) throws XbbException;

    /**
     * 批量插入
     * @param list 入参
     * @throws XbbException error
     */
    void insertBatch(List<FundAccountFlowEntity> list) throws XbbException;

    /**
     * 查询某种类型的资金流水数据
     * @param corpid 公司id
     * @param type 类型
     * @param sheetIdIn 回/付款单id集合
     * @return java.util.List<com.xbongbong.saas.domain.entity.FundAccountFlowEntity>
     * @author zcp
     * @since v1.0
     * @version v1.0
     */
    List<FundAccountFlowEntity> getFlowListByType(String corpid, Integer type, Collection<Long> sheetIdIn);

    /**
     * 找到资金账户中重复的单据，为刷脚本使用
     *
     * @param fundParams
     * @return
     */
    List<FundAccountFlowEntity> findRepeatSheetList(Map<String, Object> fundParams);

    /***
     * 获取某种类型最近的一笔流水
     * @param corpid 公司id
     * @param date sheetTime
     * @return
     */
    FundAccountFlowEntity getLatestFlowEntity(String corpid,Long date);
}
